home *** CD-ROM | disk | FTP | other *** search
- /*
- * Example of using the 1.1 texture object functions.
- * Also, this demo utilizes Mesa's fast texture map path.
- *
- * Brian Paul June 1996
- */
-
- #include <math.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
-
- #include <ad709/tinygl/glut.h>
-
- static GLuint TexObj[2];
- static GLfloat Angle = 0.0f;
-
- static int cnt=0,v=0;
- int w=320,h=240;
-
- void draw(void) {
- glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
-
- glColor3f(1.0, 1.0, 1.0);
-
- /* draw first polygon */
- glPushMatrix();
- glTranslatef(-1.0, 0.0, 0.0);
- glRotatef(Angle, 0.0, 0.0, 1.0);
- glBindTexture(GL_TEXTURE_2D, TexObj[v]);
-
- glEnable(GL_TEXTURE_2D);
- glBegin(GL_QUADS);
- glTexCoord2f(0.0, 0.0);
- glVertex2f(-1.0, -1.0);
- glTexCoord2f(1.0, 0.0);
- glVertex2f(1.0, -1.0);
- glTexCoord2f(1.0, 1.0);
- glVertex2f(1.0, 1.0);
- glTexCoord2f(0.0, 1.0);
- glVertex2f(-1.0, 1.0);
- glEnd();
- glDisable(GL_TEXTURE_2D);
- glPopMatrix();
-
- /* draw second polygon */
- glPushMatrix();
- glTranslatef(1.0, 0.0, 0.0);
- glRotatef(Angle - 90.0, 0.0, 1.0, 0.0);
-
- glBindTexture(GL_TEXTURE_2D, TexObj[1-v]);
-
- glEnable(GL_TEXTURE_2D);
- glBegin(GL_QUADS);
- glTexCoord2f(0.0, 0.0);
- glVertex2f(-1.0, -1.0);
- glTexCoord2f(1.0, 0.0);
- glVertex2f(1.0, -1.0);
- glTexCoord2f(1.0, 1.0);
- glVertex2f(1.0, 1.0);
- glTexCoord2f(0.0, 1.0);
- glVertex2f(-1.0, 1.0);
- glEnd();
- glDisable(GL_TEXTURE_2D);
-
- glPopMatrix();
- }
-
-
- /* new window size or exposure */
- void reshape(int width, int height) {
- glViewport(0, 0, (GLint) width, (GLint) height);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- /* glOrtho( -3.0, 3.0, -3.0, 3.0, -10.0, 10.0 ); */
- glFrustum(-2.0, 2.0, -2.0, 2.0, 6.0, 20.0);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glTranslatef(0.0, 0.0, -8.0);
- }
-
-
- void bind_texture(int texobj,int image)
- {
- static int width = 8, height = 8;
- static int color[2][3]={
- {255,0,0},
- {0,255,0},
- };
- GLubyte tex[64][3];
- static GLubyte texchar[2][8*8] = {
- {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0},
- {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2, 2, 0, 0, 0,
- 0, 0, 2, 0, 0, 2, 0, 0,
- 0, 0, 0, 0, 0, 2, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0,
- 0, 0, 0, 2, 0, 0, 0, 0,
- 0, 0, 2, 2, 2, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0}};
-
- int i,j;
-
- glBindTexture(GL_TEXTURE_2D, texobj);
-
- /* red on white */
- for (i = 0; i < height; i++) {
- for (j = 0; j < width; j++) {
- int p = i * width + j;
- if (texchar[image][(height - i - 1) * width + j]) {
- tex[p][0] = color[image][0];
- tex[p][1] = color[image][1];
- tex[p][2] = color[image][2];
- } else {
- tex[p][0] = 255;
- tex[p][1] = 255;
- tex[p][2] = 255;
- }
- }
- }
- glTexImage2D(GL_TEXTURE_2D, 0, 3, width, height, 0,
- GL_RGB, GL_UNSIGNED_BYTE, tex);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
- /* end of texture object */
- }
-
-
-
- void init(void) {
- glEnable(GL_DEPTH_TEST);
-
- /* Setup texturing */
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
- glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
-
- /* generate texture object IDs */
- glGenTextures(2, TexObj);
- bind_texture(TexObj[0],0);
- bind_texture(TexObj[1],1);
- }
-
-
- void idle(void) {
- Angle += 2.0;
- if (++cnt==50) {
- cnt=0;
- // v=!v;
- }
- draw();
- glutPostRedisplay();
- }
-
- /* change view angle, exit upon ESC */
- GLenum key(int k, GLenum mask)
- {
- switch (k) {
- case 'q':
- case 27:
- glutDestroyWindow(0);
- exit(0);
- }
- return GL_FALSE;
- }
-
- int main(int argc, char **argv) {
- glutInit(&argc, argv);
- glutInitWindowSize(w, h);
- glutInitWindowPosition(0, 0);
-
- glutCreateWindow("Texture-mapped object");
- init();
-
- glutDisplayFunc(draw);
- glutReshapeFunc(reshape);
- glutIdleFunc(idle);
- glutMainLoop();
-
- return 0;
- }
-
-
-